springboot文档阅读 第三章 配置信息读取

稍微粘贴一下配置文件信息,但还是没有总结出最佳实践,todo待总结,不过想必是spring源码的配置方式吧。

判断环境是否是web环境

SpringApplication将尝试为你创建正确类型的ApplicationContext,默认情况下,根据你开发的是否为web应用决定使用AnnotationConfigApplicationContextAnnotationConfigEmbeddedWebApplicationContext

用于确定是否为web环境的算法相当简单(判断是否存在某些类),你可以使用setWebEnvironment(boolean webEnvironment)覆盖默认行为。

应用参数

如果需要获取传递给SpringApplication.run(…)的应用参数,你可以注入一个org.springframework.boot.ApplicationArguments类型的bean。ApplicationArguments接口即提供对原始String[]参数的访问,也提供对解析成optionnon-option参数的访问:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import org.springframework.boot.*
import org.springframework.beans.factory.annotation.*
import org.springframework.stereotype.*

@Component
public class MyBean {

@Autowired
public MyBean(ApplicationArguments args) {
boolean debug = args.containsOption("debug");
List<String> files = args.getNonOptionArgs();
// if run with "--debug logfile.txt" debug=true, files=["logfile.txt"]
}

}

Spring Boot也会注册一个包含Spring Environment属性的CommandLinePropertySource,这就允许你使用@Value注解注入单个的应用参数。

命令行参数

默认情况下,SpringApplication会将所有命令行配置参数(以’–’开头,比如--server.port=9000)转化成一个property,并将其添加到Spring Environment中。正如以上章节提过的,命令行属性总是优先于其他属性源。

如果不想将命令行属性添加到Environment,你可以使用SpringApplication.setAddCommandLineProperties(false)来禁用它们。

@ConfigurationProperties vs. @Value

@Value是Spring容器的一个核心特性,它没有提供跟type-safe Configuration Properties相同的特性。下面的表格总结了@ConfigurationProperties@Value支持的特性:

特性 @ConfigurationProperties @Value
Relaxed绑定 Yes No
Meta-data支持 Yes No
SpEL表达式 No Yes

如果你为自己的组件定义了一系列的配置keys,我们建议你将它们以@ConfigurationProperties注解的POJO进行分组。由于@Value不支持relaxed绑定,所以如果你使用环境变量提供属性值的话,它就不是很好的选择。最后,尽管@Value可以写SpEL表达式,但这些表达式不会处理来自Application属性文件的属性。

Profiles

Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只在特定的环境下生效。任何@Component@Configuration都能注解@Profile,从而限制加载它的时机:

1
2
3
4
5
6
7
@Configuration
@Profile("production")
public class ProductionConfiguration {

// ...

}

以正常的Spring方式,你可以使用spring.profiles.activeEnvironment属性来指定哪个配置生效。你可以使用通常的任何方式来指定该属性,例如,可以将它包含到application.properties中:

1
spring.profiles.active=dev,hsqldb

或使用命令行开关:

1
--spring.profiles.active=dev,hsqldb
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×